package br.com.empeng.model.persistencia.util;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	
	private static SessionFactory fabrica ;
	private static Session sessao;
	
	//Cria a fabrica a primeira vez que a classe HibernateUtil e utilizada
	static{
		
		//Objeto de Configuracao
		AnnotationConfiguration config =  new AnnotationConfiguration();
		
		//Lemos o arquivo xml e o transformamos em objeto Configuration
		Configuration arquivoconfig = config.configure("hibernate.cfg.xml");
		
		//Construimos uma fabrica de sessao do Hibernate atravez do objeto obtido do arquivo xml
		fabrica = arquivoconfig.buildSessionFactory();		
	}
	
	/**
	 * Abrir conexao com Banco de dados
	 * @return Objeto de Sessao
	 */
	public static Session abrirSessao(){
		//Pede para fabrica abrir conexao com o banco e retorna o objeto de sessao
		if(sessao==null){
			//criando uma nova sessao
			sessao= fabrica.openSession();
		}
		//retorna a sessao
		return sessao;
	} 
	
	/**
	 * Fecha a sessao com o banco de dados
	 */
	public void fecharSessao(){
		sessao.close();		
	}	
}
